Caching systems in the data storage art have traditionally operated with fixed units of data to be cached: blocks, extents, LUNs (logical drives), etc., in the storage system. At that level, far below and removed from the level of applications or file systems, there is no ability to make use of contextual information (e.g., contextual criteria such as file name, application name, user information, etc.,) in caching decisions. Past art has focused on attempting to derive context from the data storage system operations visible to the cache, which operate on or within fixed units of storage.
A recent invention is the ability to make use of context in caching decisions by situating the caching function at the level of file systems where contextual information is available (so-called “file caches”). However, most caches are “block caches” in that they operate at the storage device level and see operations on blocks of data where the context of the storage operation has been lost. For such caches it would be useful to be able to provide similar features and functionality of the file caches.
In fact it would be even more useful to be able to provide such features and functionality without the cooperation of the block cache because such cooperation is rarely possible: block caches tend to be pre-existing and/or third party technology and may even be remote to where the context of the storage operation originates or resides. What is needed is a mechanism to provide added features that improve the efficiency or scalability of existing block caches.